package zmaster587.advancedRocketry.event; import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.world.BlockEvent.BreakEvent; import net.minecraftforge.event.world.ChunkEvent; import zmaster587.advancedRocketry.AdvancedRocketry; import zmaster587.advancedRocketry.cable.NetworkRegistry; import zmaster587.advancedRocketry.tile.cables.TilePipe; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; public class CableTickHandler { @SubscribeEvent public void onTick(TickEvent.ServerTickEvent tick) { if(tick.phase ==Phase.END) { NetworkRegistry.dataNetwork.tickAllNetworks(); NetworkRegistry.energyNetwork.tickAllNetworks(); NetworkRegistry.liquidNetwork.tickAllNetworks(); } } @SubscribeEvent public void chunkLoadedEvent(ChunkEvent.Load event) { Map map = event.getChunk().chunkTileEntityMap; Iterator<Entry> iter = map.entrySet().iterator(); try { while(iter.hasNext()) { Object obj = iter.next().getValue(); if(obj instanceof TilePipe) { ((TilePipe)obj).markForUpdate(); } } } catch ( ConcurrentModificationException e) { AdvancedRocketry.logger.warn("You have been visited by the rare pepe.. I mean error of pipes not loading, this is not good, some pipe systems may not work right away. But it's better than a corrupt world"); } } @SubscribeEvent public void onBlockBroken(BreakEvent event) { if(event.block.hasTileEntity(event.blockMetadata)) { TileEntity homeTile = event.world.getTileEntity(event.x , event.y, event.z); if(homeTile instanceof TilePipe) { //removed in favor of pipecount //boolean lastInNetwork =true; ((TilePipe)homeTile).setDestroyed(); ((TilePipe)homeTile).setInvalid(); int pipecount=0; for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { TileEntity tile = event.world.getTileEntity(event.x + dir.offsetX, event.y + dir.offsetY, event.z + dir.offsetZ); if(tile instanceof TilePipe) pipecount++; } //TODO: delete check if sinks/sources need removal if(pipecount > 1) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { TileEntity tile = event.world.getTileEntity(event.x + dir.offsetX, event.y + dir.offsetY, event.z + dir.offsetZ); if(tile instanceof TilePipe) { ((TilePipe) tile).getNetworkHandler().removeNetworkByID(((TilePipe) tile).getNetworkID()); ((TilePipe) tile).setInvalid(); //lastInNetwork = false; } //HandlerCableNetwork.removeFromAllTypes((TilePipe)tile,event.world.getTileEntity(event.x, event.y, event.z)); } } if(pipecount == 0) //lastInNetwork ((TilePipe)homeTile).getNetworkHandler().removeNetworkByID(((TilePipe)homeTile).getNetworkID()); ((TilePipe)homeTile).markDirty(); } else if(homeTile != null) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { TileEntity tile = event.world.getTileEntity(event.x + dir.offsetX, event.y + dir.offsetY, event.z + dir.offsetZ); if(tile instanceof TilePipe) { ((TilePipe)tile).getNetworkHandler().removeFromAllTypes((TilePipe)tile, homeTile); } } } } } }